/***************************************************
> Copyright (C) 2024 ==KINGYI== All rights reserved.
> File Name: data.h
> Author:MOKI
> Mail:1913964829@qq.com
> Created Time: 2024年09月09日 星期一 15时02分29秒
***************************************************/
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#define TICKET_FEE 500
typedef union
{
    char global_name_employee[50];
    char global_name_visitor[50];
} GlobalVariable;
#define EMPLOYEE 1
#define VISITOR 2
#define GLOBAL_VARIABLE_FILE_PATH "globalvariable.txt"
// 定义管理员用户
typedef struct
{
    char name[50];     // 管理员姓名
    char password[20]; // 密码
    char contact[20];  // 联系方式
} Root;
// 管理员信息文件路径
#define ROOTS_FILE_PATH "roots.txt"
// 定义植物结构体
typedef struct
{
    char name[50];          // 植物名称
    char species[50];       // 植物种类
    int planting_date;      // 种植日期（以年份表示）
    char growth_status[50]; // 生长状态
    char pest_disease[50];  // 病虫害情况
} Plant;
// 植物信息文件路径
#define PLANTS_FILE_PATH "plants.txt"
// 定义员工结构体
typedef struct
{
    char name[50];     // 员工姓名
    char password[20]; // 密码
    char position[50]; // 员工职位
    char contact[20];  // 联系方式
    int working_hours; // 工作时间
    double salary;     // 工资
} Employee;
// 员工信息文件路径
#define EMPLOYEES_FILE_PATH "employees.txt"
// 定义游客结构体
typedef struct
{
    char name[50];      // 游客姓名
    char password[20];  // 密码
    char contact[20];   // 联系方式
    int entry_time;     // 入园时间（以小时表示）
    double consumption; // 消费记录
} Visitor;
// 游客信息文件路径
#define VISITORS_FILE_PATH "visitors.txt"
// 定义监控数据结构体
typedef struct
{
    char location[50]; // 监控位置
    char event[50];    // 事件类型
    int timestamp;     // 时间戳
} SurveillanceData;
// 监控数据文件路径
#define SURVEILLANCE_DATA_FILE_PATH "surveillance_data.txt"
// 定义环境数据结构体
typedef struct
{
    int temperature; // 温度
    int humidity;    // 湿度
    int light;       // 光照
    int air_quality; // 空气质量
    int timestamp;   // 时间戳
} EnvironmentData;
// 环境数据文件路径
typedef struct DataList
{
    union
    {
        Root root;
        Plant plant;
        Employee employee;
        Visitor visitor;
        SurveillanceData surveillanceData;
        EnvironmentData environmentData;
    } datatype;
    struct DataList *pn;
} DataList;
#define ENVIRONMENT_DATA_FILE_PATH "environment_data.txt"
// 注册或登录判断
void isLogReg(int id_flag);
// 登录函数
void login(int id_flag);
// 注册函数
void reg(int id_flag);
// 管理员账号功能
void rootManage();
// 员工账号功能
void employeeManage();
// 游客账号功能
void visitorManage();
// 管理员工信息
void manageEmployee();
// 管理游客信息
void manageVisitor();
// 管理植物信息
void managePlants();
// 管理监控信息
void manageSurveillanceData();
// 管理环境信息
void manageEnvironmentData();
// 创建员工链表，读取员工数据，返回头指针
DataList *createEmployeeList();
// 创建游客链表返回头指针
DataList *createVisitorList();
// 创建植物链表返回头指针
DataList *createPlantList();
// 创建监控数据链表返回头指针
DataList *createSurveillanceDataList();
// 创建环境信息链表返回头指针
DataList *createEnvironmentDataList();
// 传入头指针释放链表
void freeList(DataList *head);
// 显示打印员工链表
void displayList_E(DataList *head);
// 显示打印游客链表
void displayList_V(DataList *head);
// 显示打印植物链表
void displayList_P(DataList *head);
// 显示打印监控信息链表
void displayList_S(DataList *head);
// 显示打印环境信息
void displayList_Envir(DataList *head);
// 打印输出植物介绍
void displayPlantIntro();
// 修改员工工资
int alterSalary(DataList *head, char *name, double salary);
// 修改游客消费
int alterConsumption(DataList *head, char *name, double consumption);
// 将储存员工信息的链表写入文件
void fileWriteEmployee(DataList *head);
// 将游客信心写入链表
void fileWriteVisitor(DataList *head);
// 将储存植物信息的链表写入文件
void fileWritePlant(DataList *head);
// 将储存监控信息的链表写入文件
void fileWriteSurveillanceData(DataList *head);
// 将环境信息储存到文件
void fileWriteEnvironmentData(DataList *head);
// 删除第n个员工,返回头指针，超出界限返回空指针
DataList *deletenList_E(DataList *head, int n);
// 删除第n个z植物,返回头指针，超出界限返回空指针
DataList *deletenList_P(DataList *head, int n);
// 返回链表节点数
int listLen(DataList *head);
// 增加植物信息，在链表尾部插入链表
void addPlantToList(DataList *head);
// 增加监控信息，在链表尾部插入节点
void addSurveillanceDataToList(DataList *head);
// 在链表尾部加入新节点打印
void updataEnvironmentDataToList(DataList *head);
// 完善个人信息
void updataEmployee();
// 完善游客信息
void updataVisitor();
// 打印对应时间戳信息
void findTimestamp(DataList *head, int timestamp);
// 生成范围内的随机数
int randnum(int min, int max);
// 获得时间戳
int gettimestamp();
// 游客购买门票
void purchaseTicket();
// 随机生成环境数据
EnvironmentData randEnvirData();
//写入全局变量，参数1员工，2游客
void fileWriteGlobal(int num, char name[50]);
//读取全局变量，1员工，2游客
//char *fileReadGlobal(int num);
#endif
